<?php
if(!defined('BLOG'))exit('不作死就不会死');
	 /*	处理文件操作
	 *  @author	Freax
	 *  @2014-3-24
	 *  @contact  huangyanxiong2013@gmail.com
	 */
	class File{
		/**
		 * 文件路径
		 * @var string
		 */
		public $filePath;
		/**
		 * 文件移动，复制的目标地址 
		 * @var string
		 */
		public $FileDestAddr;
		/**
		 * 文件指针
		 * @var resource
		 */
		public $fp;
		/**
		 * 文件名称
		 * @var string
		 */
		public $fileName;
		public $TempFilename;
		/**
		 * 
		 * @param string $filePath
		 * @param string $fileName
		 */
		public function __construct($filePath){
			$this->filePath=$filePath;
		}
		/**
		 * 判断文件是否存在
		 * @return boolean
		 */
		public function existsFile(){
			if (!is_file($this->filePath.'/'.$this->fileName)) {
				return false;
			}
			return true;
		}
		/**
		 *  判断目录是否存在
		 * @return boolean
		 */
		public function existsPath(){
			if (!is_dir($this->filePath)){
				return false;
			}
			return true;
		}
		/**
		 * 创建文件
		 */
		public function createFile($fileName){
			$this->fileName=$fileName;
			if (!$this->TempFilename=tempnam($this->filePath,$fileName)){
					exit('文件创建失败');
				};
			rename($this->filePath.'/'.$this->TempFilename,$this->filePath.'/'. $fileName);
		}
		/**
		 * 创建文件夹
		 * @param int $crateFolderPurview  文件夹的权限
		 */
		public function createDir($crateFolderPurview){
			if (!$this->existsPath()){
				if (!mkdir($this->filePath,$crateFolderPurview,true)){
					exit('创建文件夹失败');
				}
			}
		}
		/**
		 * 打开文件
		 * @param string  $openFileMode 打开模式
		 * 		 
		 *  
		 *	'r'
		 *	只读方式打开，将文件指针指向文件头。 
			'r+'
			读写方式打开，将文件指针指向文件头。 
			'w'
			写入方式打开，将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 
			'w+'
			读写方式打开，将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 
			'a'
			写入方式打开，将文件指针指向文件末尾。如果文件不存在则尝试创建之。 
			'a+'
			读写方式打开，将文件指针指向文件末尾。如果文件不存在则尝试创建之。 
			'x'
			创建并以写入方式打开，将文件指针指向文件头。如果文件已存在，则 fopen() 调用失败并返回 FALSE，并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持，仅能用于本地文件。 
			'x+'
			创建并以读写方式打开，将文件指针指向文件头。如果文件已存在，则 fopen() 调用失败并返回 FALSE，并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持，仅能用于本地文件
  
		 */
		public function openFile($fileName,$openFileMode){
			$this->fileName=$fileName;
			if ($this->existsFile()) {
				exit('文件已经存在');
			}
			$this->createDir('0777');
			$this->fp=fopen($this->filePath.'/'.$this->fileName,$openFileMode);
		}
		/**
		 * 写内容进入文件
		 * @param void $writeFileContent
		 */
		public function writeFile($writeFileContent){
			if($this->fp){
				if (!fwrite($this->fp, $writeFileContent)) {
					exit('文件写入失败');
				}
			}
		}
		/**
		 * 关闭文件
		 */
		public function closeFile(){
			if (!fclose($this->fp)) {
				exit('关闭文件失败');
			}
		}
		/**
		 * 复制文件
		 */
		public function copyFile(){
			if (!$this->existsFile()) {
				exit('文件不存在，复制失败');
			}
			if (!copy($this->filePath.$this->fileName,$this->FileDestAddr)) {
				exit('复制不成功');
			}
		}
		/**
		 * 移动文件
		 */
		public function moveFile(){
			if (!$this->existsFile()) {
				exit('文件不存在，移动文件失败');
			}
			if (!copy($this->filePath.$this->fileName, $this->FileDestAddr)) {
				exit('移动不成功');
			}
			if (unlink($this->filePath.$this->fileName)){
				exit('移动失败');
			};
		}
	}
?>